Spring Boot JPA এর মাধ্যমে CRUD অপারেশন

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA)
322

Spring Boot JPA (Java Persistence API) ডাটাবেসের সঙ্গে কাজ করার জন্য একটি শক্তিশালী প্রযুক্তি যা Spring Framework এর সাথে ইন্টিগ্রেট করা হয়। JPA ব্যবহারের মাধ্যমে আমরা ডাটাবেসে Create, Read, Update, এবং Delete (CRUD) অপারেশনগুলো খুব সহজে বাস্তবায়ন করতে পারি। Spring Boot JPA এর মাধ্যমে এই অপারেশনগুলি সম্পাদন করতে Spring Data JPA ব্যবহার করা হয়, যা JpaRepository ইন্টারফেসের মাধ্যমে CRUD অপারেশন সহজ করে তোলে।

Spring Boot JPA-তে CRUD অপারেশনগুলি সম্পাদন করার জন্য আপনাকে শুধু @Entity, @Repository এবং JpaRepository ব্যবহার করতে হবে। নিচে CRUD অপারেশনগুলির বিস্তারিত উদাহরণ দেয়া হয়েছে।


১. Entity ক্লাস তৈরি করা

প্রথমে একটি JPA Entity তৈরি করতে হবে। একটি Entity হলো Java ক্লাস যা ডাটাবেস টেবিলের সাথে ম্যাপিং হয়।

উদাহরণ: Employee Entity ক্লাস

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String department;
    private double salary;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

এখানে, Employee একটি JPA Entity যা Employee টেবিলের সাথে সংযুক্ত।


২. JpaRepository ইন্টারফেস তৈরি করা

Spring Data JPA-তে JpaRepository ইন্টারফেস ব্যবহৃত হয় ডাটাবেস অপারেশনগুলি পরিচালনা করার জন্য। এই ইন্টারফেসের মাধ্যমে আপনার Entity ক্লাসের জন্য CRUD অপারেশনগুলো স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।

উদাহরণ: EmployeeRepository ইন্টারফেস

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    // Custom queries can be added here if needed
}

এখানে, EmployeeRepository ইন্টারফেস JpaRepository থেকে এক্সটেন্ড করা হয়েছে, যা Employee Entity ক্লাস এবং Long টাইপের প্রাইমারি কীকে গ্রহণ করে। JpaRepository অটোমেটিক্যালি CRUD অপারেশনগুলো প্রদান করে, যেমন save(), findAll(), findById(), delete() ইত্যাদি।


৩. Spring Boot Service Layer

Service Layer-এ আপনি CRUD অপারেশনগুলো বাস্তবায়ন করতে পারেন। এখানে আমরা EmployeeRepository ব্যবহার করে CRUD অপারেশনগুলি তৈরি করবো।

উদাহরণ: EmployeeService ক্লাস

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    // Create or Update Employee
    public Employee saveEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }

    // Get All Employees
    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }

    // Get Employee by ID
    public Optional<Employee> getEmployeeById(Long id) {
        return employeeRepository.findById(id);
    }

    // Delete Employee by ID
    public void deleteEmployee(Long id) {
        employeeRepository.deleteById(id);
    }
}

এখানে, EmployeeService ক্লাসের মাধ্যমে CRUD অপারেশনগুলো বাস্তবায়ন করা হয়েছে:

  • saveEmployee(): Employee তৈরি বা আপডেট করার জন্য ব্যবহৃত।
  • getAllEmployees(): সব Employee রেকর্ড রিটার্ন করার জন্য ব্যবহৃত।
  • getEmployeeById(): নির্দিষ্ট Employee রেকর্ড খোঁজার জন্য ব্যবহৃত।
  • deleteEmployee(): নির্দিষ্ট Employee রেকর্ড মুছে ফেলার জন্য ব্যবহৃত।

৪. Spring Boot Controller Layer

Controller Layer এ EmployeeService ব্যবহার করে HTTP রিকুয়েস্টের মাধ্যমে CRUD অপারেশনগুলো সম্পাদন করা হবে।

উদাহরণ: EmployeeController ক্লাস

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    // Create or Update Employee
    @PostMapping
    public ResponseEntity<Employee> createOrUpdateEmployee(@RequestBody Employee employee) {
        Employee savedEmployee = employeeService.saveEmployee(employee);
        return new ResponseEntity<>(savedEmployee, HttpStatus.CREATED);
    }

    // Get All Employees
    @GetMapping
    public List<Employee> getAllEmployees() {
        return employeeService.getAllEmployees();
    }

    // Get Employee by ID
    @GetMapping("/{id}")
    public ResponseEntity<Employee> getEmployeeById(@PathVariable Long id) {
        Optional<Employee> employee = employeeService.getEmployeeById(id);
        return employee.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
    }

    // Delete Employee by ID
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteEmployee(@PathVariable Long id) {
        employeeService.deleteEmployee(id);
        return ResponseEntity.noContent().build();
    }
}

এখানে:

  • @PostMapping: একটি নতুন Employee তৈরি বা আপডেট করার জন্য ব্যবহৃত।
  • @GetMapping: সব Employee অথবা নির্দিষ্ট Employee ID এর জন্য তথ্য ফেরত দেয়।
  • @DeleteMapping: একটি নির্দিষ্ট Employee মুছে ফেলার জন্য ব্যবহৃত।

৫. Spring Boot Application Class

Spring Boot অ্যাপ্লিকেশন রান করার জন্য একটি @SpringBootApplication ক্লাস তৈরি করতে হবে।

উদাহরণ: SpringBootJpaApplication ক্লাস

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootJpaApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootJpaApplication.class, args);
    }
}

এখানে @SpringBootApplication অ্যানোটেশন ব্যবহৃত হয়েছে, যা Spring Boot অ্যাপ্লিকেশন শুরু করার জন্য প্রয়োজনীয় কনফিগারেশন করে।


৬. Testing CRUD Operations

Spring Boot JPA CRUD অপারেশনগুলো পরীক্ষা করতে আপনি JUnit ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি EmployeeService ক্লাসের মেথডগুলো ইউনিট টেস্ট করতে পারেন।

উদাহরণ: JUnit Test

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class EmployeeServiceTest {

    @Autowired
    private EmployeeService employeeService;

    @Test
    public void testSaveEmployee() {
        Employee employee = new Employee();
        employee.setName("John");
        employee.setDepartment("IT");
        employee.setSalary(50000);

        Employee savedEmployee = employeeService.saveEmployee(employee);

        assertNotNull(savedEmployee);
        assertEquals("John", savedEmployee.getName());
    }
}

এখানে EmployeeService এর saveEmployee() মেথড টেস্ট করা হয়েছে।


সারাংশ

Spring Boot JPA এর মাধ্যমে CRUD অপারেশন খুব সহজে বাস্তবায়ন করা যায়। JpaRepository ইন্টারফেস ব্যবহার করে আপনি খুব সহজেই Create, Read, Update, এবং Delete অপারেশন সম্পন্ন করতে পারেন। Spring Boot এর auto configuration এবং data access layer abstraction ডেভেলপারদের জন্য JPA ব্যবহার করা সহজ করে তোলে। Spring Data JPA, Spring Boot Service, এবং Spring Boot Controller ব্যবহার করে CRUD অপারেশনগুলো কার্যকরীভাবে সম্পন্ন করা যায় এবং Spring Boot অ্যাপ্লিকেশনের পারফরম্যান্সও বৃদ্ধি পায়।

Content added By

CRUD অপারেশন (Create, Read, Update, Delete) এর বেসিক ধারণা

311

Spring Boot JPA (Java Persistence API) এর মাধ্যমে আপনি সহজেই ডেটাবেসের সাথে কাজ করতে পারেন। CRUD অপারেশন (Create, Read, Update, Delete) হল ডেটাবেসে ডেটা পরিচালনার জন্য মৌলিক অপারেশন। স্প্রিং ডেটা জেপিএ ব্যবহার করে আপনি এই অপারেশনগুলো খুব সহজে বাস্তবায়ন করতে পারেন।

এই টিউটোরিয়ালে Spring Boot এবং Spring Data JPA ব্যবহার করে CRUD অপারেশনগুলো কীভাবে বাস্তবায়ন করা যায়, তা নিয়ে আলোচনা করা হবে।


CRUD অপারেশন এর ধারণা

  1. Create: নতুন ডেটা ইনসার্ট করা।
  2. Read: ডেটাবেস থেকে ডেটা রিড বা ফেরত নেওয়া।
  3. Update: বিদ্যমান ডেটা আপডেট বা পরিবর্তন করা।
  4. Delete: ডেটাবেস থেকে ডেটা মুছে ফেলা।

Spring Data JPA ব্যবহার করে এই চারটি অপারেশন খুব সহজেই সম্পাদন করা যায়। Spring Data JPA রেপোজিটরি (Repository) ইন্টারফেসে কিছু মেথড রয়েছে, যেগুলি স্বয়ংক্রিয়ভাবে এই CRUD অপারেশনগুলি করতে সহায়তা করে।


1. Create Operation (ডেটা তৈরি করা)

Create অপারেশনটি ডেটাবেসে নতুন রেকর্ড (অবজেক্ট) ইনসার্ট করার জন্য ব্যবহৃত হয়। স্প্রিং ডেটা JPA এর save() মেথড ব্যবহার করে নতুন ডেটা ইনসার্ট করা হয়।

উদাহরণ: Create Operation

EmployeeService.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    // Create Operation
    public Employee createEmployee(Employee employee) {
        return employeeRepository.save(employee);  // save() will insert the new employee
    }
}

EmployeeController.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @PostMapping
    public Employee createEmployee(@RequestBody Employee employee) {
        return employeeService.createEmployee(employee);
    }
}

Employee.java (Entity)

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;
    private String email;

    // Constructors, Getters, Setters
}

এখানে, POST /employees এ রিকোয়েস্ট পাঠালে Employee অবজেক্ট তৈরি হবে এবং ডেটাবেসে ইনসার্ট হবে।


2. Read Operation (ডেটা পড়া)

Read অপারেশনটি ডেটাবেস থেকে ডেটা রিড করার জন্য ব্যবহৃত হয়। স্প্রিং ডেটা JPA এর findById() বা findAll() মেথড ব্যবহার করে ডেটা রিড করা যায়।

উদাহরণ: Read Operation

EmployeeService.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    // Read Operation - All Employees
    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();  // findAll() will fetch all employees
    }

    // Read Operation - Find by ID
    public Employee getEmployeeById(Long id) {
        Optional<Employee> employee = employeeRepository.findById(id);
        return employee.orElse(null);  // returns the employee if found, else null
    }
}

EmployeeController.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @GetMapping
    public List<Employee> getAllEmployees() {
        return employeeService.getAllEmployees();
    }

    @GetMapping("/{id}")
    public Employee getEmployeeById(@PathVariable Long id) {
        return employeeService.getEmployeeById(id);
    }
}

এখানে, GET /employees রিকোয়েস্টে সমস্ত কর্মচারীদের তালিকা পাওয়া যাবে এবং GET /employees/{id} রিকোয়েস্টে একটি নির্দিষ্ট কর্মচারীর তথ্য পাওয়া যাবে।


3. Update Operation (ডেটা আপডেট করা)

Update অপারেশনটি ডেটাবেসে বিদ্যমান রেকর্ডকে আপডেট করার জন্য ব্যবহৃত হয়। স্প্রিং ডেটা JPA এর save() মেথড দিয়ে আপডেট করা যায়, কারণ save() মেথড নতুন রেকর্ড ইনসার্ট এবং পুরনো রেকর্ড আপডেট করতে সক্ষম।

উদাহরণ: Update Operation

EmployeeService.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    // Update Operation
    public Employee updateEmployee(Long id, Employee updatedEmployee) {
        if (employeeRepository.existsById(id)) {
            updatedEmployee.setId(id);  // Set the ID to keep the original ID
            return employeeRepository.save(updatedEmployee);  // save() will update the employee
        }
        return null;  // Employee not found
    }
}

EmployeeController.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @PutMapping("/{id}")
    public Employee updateEmployee(@PathVariable Long id, @RequestBody Employee updatedEmployee) {
        return employeeService.updateEmployee(id, updatedEmployee);
    }
}

এখানে, PUT /employees/{id} রিকোয়েস্টে একটি নির্দিষ্ট id এর Employee আপডেট হবে।


4. Delete Operation (ডেটা মুছে ফেলা)

Delete অপারেশনটি ডেটাবেস থেকে রেকর্ড মুছে ফেলার জন্য ব্যবহৃত হয়। স্প্রিং ডেটা JPA এর deleteById() মেথড ব্যবহার করে রেকর্ড মুছে ফেলা যায়।

উদাহরণ: Delete Operation

EmployeeService.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    // Delete Operation
    public void deleteEmployee(Long id) {
        employeeRepository.deleteById(id);  // deleteById() will remove the employee
    }
}

EmployeeController.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @DeleteMapping("/{id}")
    public void deleteEmployee(@PathVariable Long id) {
        employeeService.deleteEmployee(id);
    }
}

এখানে, DELETE /employees/{id} রিকোয়েস্টে একটি নির্দিষ্ট id এর Employee মুছে ফেলা হবে।


সারাংশ

Spring Boot JPA ব্যবহার করে CRUD (Create, Read, Update, Delete) অপারেশন সহজভাবে সম্পাদিত হয়। স্প্রিং ডেটা JPA এর save(), findById(), findAll(), deleteById() ইত্যাদি মেথডগুলো ব্যবহার করে এই অপারেশনগুলো খুব সহজেই করা যায়। এর মাধ্যমে ডেটাবেসের সাথে মিথস্ক্রিয়া সহজ এবং স্বয়ংক্রিয়ভাবে করা সম্ভব হয়, যা অ্যাপ্লিকেশন ডেভেলপমেন্টে সময় এবং প্রচেষ্টা বাঁচায়।

Content added By

JpaRepository এর save(), findById(), findAll(), deleteById() মেথডের ব্যবহার

317

Spring Data JPA একটি শক্তিশালী লাইব্রেরি যা JPA (Java Persistence API) ব্যবহার করে ডাটাবেস অপারেশনকে সহজ এবং কার্যকর করে। Spring Data JPA এর JpaRepository ইন্টারফেসটি CRUD (Create, Read, Update, Delete) অপারেশন সহ অন্যান্য ডাটাবেস অপারেশন সমর্থন করে। এর মধ্যে গুরুত্বপূর্ণ কিছু মেথড হলো save(), findById(), findAll(), এবং deleteById(), যা Spring Boot JPA প্রজেক্টে ডাটাবেসের সাথে যোগাযোগ করতে ব্যবহৃত হয়।

এই টিউটোরিয়ালে আমরা JpaRepository ইন্টারফেসের মাধ্যমে এই মেথডগুলির ব্যবহার নিয়ে বিস্তারিত আলোচনা করব।


JpaRepository ইন্টারফেস

JpaRepository হল একটি Spring Data JPA ইন্টারফেস যা CrudRepository এবং PagingAndSortingRepository ইন্টারফেসগুলো এক্সটেন্ড করে। এটি CRUD (Create, Read, Update, Delete) অপারেশনসহ আরও অনেক ফিচার সরবরাহ করে, যেমন পেজিনেশন, সোর্টিং, কাস্টম কুয়েরি ইত্যাদি।

JpaRepository এর সাধারণ সাইনেচার:

public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID> {
    // Additional custom methods can be defined here
}

এখানে, T হল Entity ক্লাস এবং ID হল Entity এর primary key টাইপ।


১. save() মেথড

save() মেথড ব্যবহার করা হয় একটি Entity (বা Bean) সংরক্ষণ করতে, যদি Entity এর id না থাকে তবে এটি নতুন রেকর্ড তৈরি করে এবং যদি id থাকে তবে এটি সেই রেকর্ডটি আপডেট করে।

save() মেথডের ব্যবহার:

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    // JpaRepository automatically provides save() method
}

Employee Entity ক্লাস:

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String department;

    // Constructors, Getters, Setters
}

Usage Example:

@Autowired
private EmployeeRepository employeeRepository;

public void saveEmployee() {
    Employee employee = new Employee();
    employee.setName("John Doe");
    employee.setDepartment("IT");
    employeeRepository.save(employee);  // Saving the employee entity
}

save() মেথডটি employee Entity কে ডাটাবেসে সংরক্ষণ করবে। যদি Entity এর id থাকে, এটি আপডেট হবে, নতুবা নতুন Entity ইনসার্ট হবে।


২. findById() মেথড

findById() মেথড ব্যবহার করে আপনি ডাটাবেস থেকে একটি নির্দিষ্ট ID-তে থাকা Entity রেকর্ডটি খুঁজে পেতে পারেন। এটি একটি Optional রিটার্ন করে, যা null বা Entity অবজেক্ট হতে পারে, যদি Entity পাওয়া না যায়।

findById() মেথডের ব্যবহার:

public Optional<Employee> findEmployeeById(Long id) {
    return employeeRepository.findById(id);
}

Usage Example:

public void getEmployeeById() {
    Optional<Employee> employee = employeeRepository.findById(1L);
    if (employee.isPresent()) {
        System.out.println(employee.get().getName());
    } else {
        System.out.println("Employee not found");
    }
}

findById() মেথডটি Optional রিটার্ন করে, যা আপনি চেক করতে পারেন যে Employee অবজেক্টটি পাওয়া গেছে কিনা।


৩. findAll() মেথড

findAll() মেথড ব্যবহার করে আপনি ডাটাবেসের সব রেকর্ড একসাথে পেতে পারেন। এটি একটি List অথবা Iterable অবজেক্ট রিটার্ন করে, যা সমস্ত Entity রেকর্ড ধারণ করে।

findAll() মেথডের ব্যবহার:

public List<Employee> getAllEmployees() {
    return employeeRepository.findAll();
}

Usage Example:

public void getAllEmployees() {
    List<Employee> employees = employeeRepository.findAll();
    for (Employee employee : employees) {
        System.out.println(employee.getName() + " - " + employee.getDepartment());
    }
}

findAll() মেথডটি ডাটাবেস থেকে সব Employee রেকর্ড ফেরত দেবে এবং আপনি সেগুলি প্রসেস করতে পারবেন।


৪. deleteById() মেথড

deleteById() মেথড ব্যবহার করে আপনি একটি নির্দিষ্ট ID-এর Entity রেকর্ড ডিলিট করতে পারেন। এটি void রিটার্ন টাইপের মেথড, অর্থাৎ এটি কোনও মান ফেরত দেয় না।

deleteById() মেথডের ব্যবহার:

public void deleteEmployee(Long id) {
    employeeRepository.deleteById(id);
}

Usage Example:

public void deleteEmployeeById() {
    Long id = 1L;
    employeeRepository.deleteById(id);
    System.out.println("Employee with ID " + id + " deleted");
}

deleteById() মেথডটি নির্দিষ্ট id দিয়ে ডাটাবেস থেকে Employee রেকর্ডটি মুছে ফেলবে।


সারাংশ

  • save(): একটি নতুন Entity তৈরি বা বিদ্যমান Entity আপডেট করতে ব্যবহৃত হয়।
  • findById(): একটি নির্দিষ্ট ID দিয়ে Entity খুঁজে বের করতে ব্যবহৃত হয় এবং এটি Optional রিটার্ন করে।
  • findAll(): সমস্ত Entity রেকর্ড একসাথে খুঁজে বের করতে ব্যবহৃত হয়।
  • deleteById(): একটি নির্দিষ্ট ID দিয়ে Entity ডিলিট করতে ব্যবহৃত হয়।

Spring Data JPA এর JpaRepository ইন্টারফেস এই সাধারণ CRUD অপারেশনগুলির জন্য বিল্ট-ইন সমাধান প্রদান করে। এটি Spring Boot অ্যাপ্লিকেশনে ডাটাবেস অপারেশন পরিচালনা করার জন্য অত্যন্ত সহজ এবং কার্যকরী।

Content added By

উদাহরণ সহ CRUD অপারেশন

295

Spring Boot JPA হল একটি খুবই জনপ্রিয় ফিচার যা ডেটাবেস অপারেশন পরিচালনার জন্য স্প্রিং ডেটা জেপিএ (Spring Data JPA) ব্যবহার করে। CRUD (Create, Read, Update, Delete) অপারেশনগুলি ডেটাবেসের সঙ্গে কাজ করার জন্য খুবই মৌলিক এবং গুরুত্বপূর্ণ। Spring Boot JPA এর মাধ্যমে সহজেই CRUD অপারেশন সম্পন্ন করা যায়।

এখানে আমরা একটি Product মডেল তৈরি করব এবং Spring Boot JPA ব্যবহার করে CRUD অপারেশন বাস্তবায়ন করব।


Step 1: Maven ডিপেনডেন্সি যোগ করা

প্রথমে, আপনার pom.xml ফাইলে Spring Boot JPA এবং ডাটাবেস সংযোগের জন্য প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন।

<dependencies>
    <!-- Spring Boot Starter Web (For creating REST APIs) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- H2 Database (In-memory Database for Testing) -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Spring Boot Starter Test (For Unit Testing) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

এখানে, spring-boot-starter-data-jpa ডিপেনডেন্সি দ্বারা স্প্রিং ডেটা জেপিএ ব্যবহৃত হচ্ছে, এবং h2 ডাটাবেসকে রানটাইম ডাটাবেস হিসেবে ব্যবহার করা হচ্ছে। আপনি চাইলে mysql, postgresql বা অন্য ডাটাবেসও ব্যবহার করতে পারেন।


Step 2: application.properties কনফিগারেশন

ডাটাবেস কনফিগারেশন সেট করার জন্য application.properties ফাইল ব্যবহার করা হবে।

# H2 Database configuration
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true

এখানে, H2 ডাটাবেস ব্যবহার করা হয়েছে এবং স্প্রিং অ্যাপ্লিকেশন চালু হলে ddl-auto=update ব্যবহার করে ডাটাবেসের স্কিমা আপডেট হবে।


Step 3: Entity তৈরি করা

স্প্রিং ডেটা জেপিএ ব্যবহার করতে, প্রথমে একটি Entity ক্লাস তৈরি করতে হবে যা ডাটাবেস টেবিলের সাথে মেলে। এখানে আমরা Product নামক একটি Entity ক্লাস তৈরি করব।

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Product {

    @Id
    private Long id;
    private String name;
    private double price;

    // Constructors
    public Product() {}

    public Product(Long id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

এখানে, @Entity অ্যানোটেশনটি স্প্রিং ডেটা জেপিএকে জানায় যে এই ক্লাসটি একটি ডাটাবেস টেবিলের সাথে সম্পর্কিত। @Id অ্যানোটেশনটি id ফিল্ডকে প্রাইমারি কি হিসেবে চিহ্নিত করেছে।


Step 4: Repository Interface তৈরি করা

স্প্রিং ডেটা জেপিএ রেপোজিটরি ব্যবহারের মাধ্যমে আমরা সহজেই CRUD অপারেশন সম্পাদন করতে পারি। JpaRepository ইন্টারফেসটি স্প্রিং ডেটা জেপিএর মধ্যে CRUD অপারেশনগুলির জন্য বিল্ট-ইন মেথড সরবরাহ করে।

import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    // Custom query methods (optional)
    Product findByName(String name);
}

এখানে, ProductRepository ইন্টারফেসটি JpaRepository থেকে এক্সটেন্ড করেছে, যা স্প্রিং ডেটা জেপিএর পূর্বনির্ধারিত CRUD অপারেশনগুলির সাহায্য নিয়ে Product Entity এর সাথে ডাটাবেস অপারেশন করতে সক্ষম।


Step 5: Service Layer তৈরি করা

এখন, একটি Service Layer তৈরি করা হবে, যেখানে ডেটাবেস অপারেশনগুলো লজিকের সাথে একত্রিত হবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    // Create or Update Product
    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }

    // Get Product by ID
    public Product getProductById(Long id) {
        return productRepository.findById(id).orElse(null);
    }

    // Get All Products
    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }

    // Delete Product by ID
    public void deleteProduct(Long id) {
        productRepository.deleteById(id);
    }
}

এখানে, ProductService ক্লাসে CRUD অপারেশনগুলো পদ্ধতিগতভাবে একত্রিত করা হয়েছে, যা ProductRepository এর মাধ্যমে ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করবে।


Step 6: Controller Layer তৈরি করা

এখন একটি Controller Layer তৈরি করা হবে, যেখানে RESTful API এর মাধ্যমে ক্লায়েন্টরা CRUD অপারেশনগুলো করতে পারবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    // Create or Update Product
    @PostMapping
    public Product addProduct(@RequestBody Product product) {
        return productService.saveProduct(product);
    }

    // Get Product by ID
    @GetMapping("/{id}")
    public Product getProduct(@PathVariable Long id) {
        return productService.getProductById(id);
    }

    // Get All Products
    @GetMapping
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }

    // Delete Product by ID
    @DeleteMapping("/{id}")
    public void deleteProduct(@PathVariable Long id) {
        productService.deleteProduct(id);
    }
}

এখানে, ProductController ক্লাসটি RESTful API তৈরি করেছে যেখানে:

  • POST /products: নতুন প্রোডাক্ট যোগ করা হয়।
  • GET /products/{id}: একটি নির্দিষ্ট প্রোডাক্ট ID দ্বারা পাওয়া যায়।
  • GET /products: সমস্ত প্রোডাক্টের তালিকা পাওয়া যায়।
  • DELETE /products/{id}: একটি নির্দিষ্ট প্রোডাক্ট ID দ্বারা ডিলিট করা হয়।

Step 7: Main Class

এখন, MainApp ক্লাস ব্যবহার করে স্প্রিং বুট অ্যাপ্লিকেশন চালানো হবে।

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainApp {
    public static void main(String[] args) {
        SpringApplication.run(MainApp.class, args);
    }
}

সারাংশ

স্প্রিং বুট জেপিএ (Spring Boot JPA) ব্যবহার করে CRUD অপারেশন খুব সহজে সম্পাদন করা যায়। স্প্রিং ডেটা জেপিএ JpaRepository ইন্টারফেসের মাধ্যমে CRUD অপারেশনগুলো প্রদান করে, যা ডাটাবেসের সাথে যোগাযোগের জন্য অত্যন্ত কার্যকর। আমরা @Entity, @Repository, @Service, এবং @RestController এর মাধ্যমে একটি সম্পূর্ণ CRUD অ্যাপ্লিকেশন তৈরি করেছি, যা ডাটাবেসে ডেটা তৈরি, পড়া, আপডেট এবং মুছে ফেলার কাজ করে।

Spring Boot JPA এর মাধ্যমে আপনি দ্রুত ডেটাবেস অপারেশন করতে পারবেন এবং আপনার অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...